﻿using SCG.General;
using System;
using System.Net;

namespace SCG.SolarVengeanceEngine
{
    //Allows Scenarios to produce dynamic events during the ProcessImpulse method
    public interface IDynamicEvents
    {
        //display a message to the client
        void DisplayMessage(string message);

        //Pause
        void Pause();

        //create an explosion effect
        void CreateExplosion(int x, int y, int particles, SCGColor startColor, SCGColor endColor, int startDiam, int endDiam, int lifeSpan, bool playSound);

        //relocate an object
        void RelocateObject(SVMapObject svm, int x, int y);

        //Set a terrain cell
        void SetTerrain(int x, int y, char terrain);

        //Move a StarShip toward the specified destination point
        void MoveStarShip(StarShip ship, int destX, int destY);

        //Remove an object
        void RemoveObject(SVMapObject svm);

        //adjust values for a StarShip
        void AdjustShipValues(StarShip ship, int? engines, int? maxEngines, int? value, int? maxValue, bool respectFixedValues);

        //adjust starsystem values
        void AdjustStarSystemValues(StarSystem sys, int? value, double? resources, int? shields, int? scanners);

        //Create a StarShip
        StarShip CreateStarShip(int x, int y, Player owner, StarShipType shipType, int engines, int primary, bool cloaked);

        //Set StarSystem Shields
        void SetShields(StarSystem sys, int shields);

        //Move a UDO
        void MoveUDO(UDO udo, int x, int y);

        //Create a StarSystem
        StarSystem CreateStarSystem(int x, int y, int value, int shields, int scanners, double resources);

        //Create a Wormhole
        Wormhole CreateWormhole(int x, int y, int destX, int destY);

        //Create a BlackHole
        BlackHole CreateBlackHole(int x, int y, int radius);

        //Create a Pulsar
        Pulsar CreatePulsar(int x, int y);

        //Change the radius of a black hole
        void SetBlackHoleRadius(BlackHole bh, int radius);

        //Damage a StarShip
        void DamageStarShip(StarShip ship, int damage);

        //Create a UDO
        void CreateUDO(int x, int y, string name, string imageFile, string description, bool autoPickup, bool ignoreBlackHoles, bool taggable);
    }
}
